# xray_scan.py

class XRayScan:
    def __init__(self, angle_deg, sensor_data):
        """
        初始化XRayScan对象。

        :param angle_deg: 拍照的角度（角度制）
        :param sensor_data: 拍照时的传感器数据（列表）
        """
        if len(sensor_data) % 2 == 0:
            raise ValueError("Sensor data length must be odd.")

        self.angle_deg = angle_deg
        self.sensor_data = sensor_data
        self.origin_index = len(sensor_data) // 2  # 计算原点的下标

    def convert_to_radians(self):
        """
        将拍照的角度值从角度制转换为弧度制。

        :return: 角度值（弧度制）
        """
        import math
        return math.radians(self.angle_deg)

    def get_relative_to_origin(self, offset):
        """
        获取相对于原点的元素。

        :param offset: 相对原点的偏移量
        :return: 指定偏移量的传感器数据元素
        """
        index = self.origin_index + offset
        if index < 0 or index >= len(self.sensor_data):
            raise IndexError("Offset out of range.")
        return self.sensor_data[index]

    def get_relative_length(self):
        """
        获取相对长度，即相对原点位置的长度。

        :return: 相对长度
        """
        return self.origin_index

    def get_absolute_length(self):
        """
        获取绝对长度，即传感器数据的总长度。

        :return: 绝对长度
        """
        return len(self.sensor_data)

    def __repr__(self):
        """
        返回对象的字符串表示。
        """
        return (f"XRayScan(angle_deg={self.angle_deg}, origin_index={self.origin_index}, "
                f"sensor_data={self.sensor_data})")


def main():
    # 创建一个XRayScan对象
    angle = 30  # 拍照的角度（角度制）
    sensor_data = [0, 1, 0, 3, 0, 2, 0, 1, 0]  # 拍照时的传感器数据，长度为奇数

    xray_scan = XRayScan(angle, sensor_data)

    # 打印XRayScan对象
    print(xray_scan)

    # 将角度转换为弧度制
    angle_rad = xray_scan.convert_to_radians()
    print(f"Angle in radians: {angle_rad}")

    # 获取原点元素
    origin_value = xray_scan.get_relative_to_origin(0)
    print(f"Origin value: {origin_value}")

    # 获取原点右侧第一个元素
    right_value = xray_scan.get_relative_to_origin(1)
    print(f"Right value: {right_value}")

    # 获取原点左侧第一个元素
    left_value = xray_scan.get_relative_to_origin(-1)
    print(f"Left value: {left_value}")

    # 获取相对长度
    relative_length = xray_scan.get_relative_length()
    print(f"Relative length: {relative_length}")

    # 获取绝对长度
    absolute_length = xray_scan.get_absolute_length()
    print(f"Absolute length: {absolute_length}")


if __name__ == "__main__":
    main()